package com.itcam.cli.command;

import cn.hutool.core.io.FileUtil;
import cn.hutool.json.JSONUtil;
import com.itcam.generator.MainGenerator;
import com.itcam.model.DataModel;
import com.itcam.cli.command.JsonGenerateCommand;
import lombok.Data;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;

import java.util.concurrent.Callable;


@Command(name = "json-generate", description = "读取 json 文件生成代码", mixinStandardHelpOptions = true)
@Data
public class JsonGenerateCommand implements Callable<Integer> {

    @Option(names = {"-f", "--file"},
            arity = "0..1",
            description = "json 文件路径",
            interactive = true,  // 🎮 支持互动模式（像操作数控面板）
            echo = true)         // 🔍 显示输入内容（透明化生产流程）
    private String filePath;     // 📁 原料进货单路径

    // ============ 🏃【流水线启动】============
    @Override
    public Integer call() throws Exception {
        // 🚨 安全隐患：没有原料质检环节！
        // 🚩 阶段1：原料质检（建议添加）
        // 1️⃣ 【读取原料】从文件系统获取JSON数据
        String jsonStr = FileUtil.readUtf8String(filePath); // 📦 拆封原料包装
        if (!FileUtil.exist(filePath)) {
            System.err.println("🚨 原料文件不存在：" + filePath);
            return 1;
        }

        // 🚩 阶段2：图纸解析
        // 2️⃣ 【解析蓝图】将JSON转换为数据模型（像把订单翻译成机器指令）
        DataModel dataModel = JSONUtil.toBean(jsonStr, DataModel.class);

        // 🚩 阶段3：启动生产
        // 3️⃣ 【开动机器】调用核心生成器（流水线开始运转）
        try {
            MainGenerator.doGenerate(dataModel);
        } catch (Exception e) {
            System.err.println("🔥 模板引擎故障：" + e.getMessage());
            return 2;
        }

        return 0; // 🏁 生产完成亮绿灯
    }
}
